<?php

class Blog
{
	private $id;
	private $tipoId;
	private $posts;
	
	public function Blog($id, $tipo) {
		$tipo	=	strtolower($tipo);
		if (is_numeric($id) && ($tipo == 'usuario' || $tipo == 'curso')) {
			$this->setId($id);
			$this->setTipoId($tipo);
		}
		else {
			$this->setId(NULL);
			$this->setTipoId(NULL);
			$this->setPosts(NULL);
		}
	}
	
	public function setId($id) {
		$this->id	=	$id;
	}
	
	public function getId() {
		return $this->id;
	}
	
	public function setTipoId($tipoId) {
		$this->tipoId	=	$tipoId;
	}
	
	public function getTipoId() {
		return $this->tipoId;
	}
	
	public function getPosts($idPost, $dataInicio, $dataFim, $idAtividade, $paginaAtual = NULL, $resultadosPagina = NULL, $ordenacaoAtual = NULL, $ordemAtual = NULL) {
		if ($this->validaBusca($idPost, $dataInicio, $dataFim, $idAtividade)) {
			$campoId	=	$this->getTipoId() == 'usuario' ? 'idUsuario' : 'idCurso';
			$strQuery	=	"SELECT * FROM blogPosts WHERE " . $campoId . " = " . $this->getId() . " AND ";
			
			$strQuery	.=	$idPost != NULL	?	'idPost = ' . $idPost . ' AND ' : '';
			$strQuery	.=	$dataInicio != NULL	?	'dataHora >= "' . $dataInicio . ' 0:0:0" AND ' : '';
			$strQuery	.=	$dataFim != NULL	?	'dataHora <= "' . $dataFim . ' 23:59:59" AND ' : '';
			
			$strQuery	.=	$idAtividade != NULL ? 'idAtividade = ' . $idAtividade . ' AND ' : ''; 
			
			$strQuery	=	preg_replace('/ WHERE $/', ' ', $strQuery);
			$strQuery	=	preg_replace('/ AND $/', ' ', $strQuery);
			
			$strQueryCount	=	'SELECT COUNT(*) AS qtdResultados FROM (' . $strQuery . ') AS queryOriginal;';
			if ($resultadoCount = BancoDados::query($strQueryCount)) {
				foreach($resultadoCount as $resultado) {
					$qtdResultados	=	$resultado['qtdResultados'];
				}

				if ($qtdResultados > 0) {
					$paginaAtual	=	$paginaAtual == NULL	?	1 : $paginaAtual;
					$ordenacaoAtual	=	$ordenacaoAtual == NULL	?	'dataHora' : $ordenacaoAtual;
					$ordemAtual		=	$ordemAtual == NULL		?	'DESC' : ($ordemAtual == 'desc' ? 'DESC' : 'ASC');
						
					$strQuery	.=	' ORDER BY ' . $ordenacaoAtual . ' ' . $ordemAtual;
						
					if ($resultadosPagina != NULL) {
						$qtdPaginas		=	ceil($qtdResultados / $resultadosPagina);
						$qtdPaginas		=	$qtdPaginas == 0 ? 1 : $qtdPaginas;

						$strQuery		.=	' LIMIT ' . $resultadosPagina . ' OFFSET ' . (($paginaAtual - 1) * $resultadosPagina);
					}
					else {
						$qtdPaginas	=	1;
					}
						
					$resultado	=	BancoDados::query($strQuery);
						
					if (is_array($resultado)) {
						foreach ($resultado as $chave => $post) {
							$resultado[$chave]['comentarios']	=	array();
							$strQuery	=	"SELECT * FROM blogComentarios WHERE idPost = " . $post['idPost'];
							if (is_array($resultadoComentarios	=	BancoDados::query($strQuery))) {
								$resultado[$chave]['comentarios']	=	$resultadoComentarios;
							}
							else {
								return false;
							}
						}
						return array ('listaResultados' => $resultado, 'qtdResultadosTotal' => $qtdResultados, 'qtdPaginas' => $qtdPaginas);
					}
					else {
						return false;
					}
				}
				else {
					return array('listaResultados' => array(), 'qtdResultadosTotal' => 0, 'qtdPaginas' => 0);
				}
			}
			else {
				return false;
			}
			
			echo $strQuery;
		}
		else {
			return false;
		}
	}
	
	private function validaBusca($idPost, $dataInicio, $dataFim, $idAtividade) {
		//TODO validacao
		return true;
	}
	
	public function getListaBlogs() {
		if ($this->getTipoId() == 'usuario') {
			
		}
		else {
			$strQuery	=	"SELECT atividades.idAtividade, atividades.titulo, atividades.dataInicio, atividades.dataTermino FROM blogPosts INNER JOIN atividades ON blogPosts.idAtividade = atividades.idAtividade WHERE blogPosts.idCurso = " . $this->getId();
			
			if (is_array($resultado = BancoDados::query($strQuery))) {
				
				array_unshift($resultado, array('titulo' => texto('TEXTO_BLOG_DO_CURSO')));
				
				return $resultado;
			}
			else {
				return false;
			}
		}
	}
	
	public function inserirPost($idUsuario, $idCurso, $strTitulo, $strPost, $idAtividade) {
		//echo $idAtividade; die;
		if ($this->validar($idUsuario, $idCurso, $strTitulo, $strPost, $idAtividade)) {
			$idAtividade	=	$idAtividade == NULL ? "NULL" : $idAtividade;
			$strQuery		=	"INSERT INTO blogPosts VALUES (default, " . $idUsuario . ", " . $idCurso . ", \"" . $strTitulo . "\", NOW(), \"" . $strPost . "\", " . $idAtividade . ")";
			$result = BancoDados::query($strQuery);
			if($result && $this->tipoId == 'curso'){
				atualizaCurso($idCurso);
			}
			//die;
			return $result;
		}
		else {
			return false;
		}
	}
	
	public function editarPost($idPost, $idUsuario, $idCurso, $strTitulo, $strPost, $idAtividade) {
		if ($this->validar($idUsuario, $idCurso, $strTitulo, $strPost, $idAtividade)) {
			$idAtividade	=	$idAtividade == NULL ? "NULL" : $idAtividade;
			$strQuery		=	"UPDATE blogPosts SET idUsuario =" . $idUsuario . ", idCurso = " . $idCurso . ", titulo = \"" . $strTitulo . "\", texto = \"" . $strPost . "\", idAtividade = " . $idAtividade . " WHERE idPost = " . $idPost;
			if($this->tipoId == 'curso'){
				atualizaCurso($idCurso);
			}
			return BancoDados::query($strQuery);
		}
		else {
			return false;
		}
	}
	
	public function excluirPost($idPost) {
		if (is_numeric($idPost)) {
			$strQuery		=	"DELETE FROM blogPosts WHERE idPost = " . $idPost;
			if($this->tipoId == 'curso'){
				atualizaCurso();
			}
			return BancoDados::query($strQuery);
		}
		else {
			return false;
		}
	}
	
	public function validar($idUsuario, $idCurso, $strTitulo, $strPost, $idAtividade) {
		//TODO validar
		return true;
	}
	
	public function inserirComentario($idPost, $idUsuario, $comentario) {
		if ($this->validarComentario($idPost, $idUsuario, $comentario)) {
			$strQuery		=	"INSERT INTO blogComentarios VALUES (default, " . $idPost . ", " . $idUsuario . ", NOW(), \"" . $comentario . "\")";
			return BancoDados::query($strQuery);
		}
		else {
			return false;
		}
	}
	
	public function validarComentario($idPost, $idUsuario, $comentario) {
		//TODO validar
		return true;
	}
}
?>